package com.itheima.health.service;

import com.alibaba.dubbo.config.annotation.Service;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.health.dao.RoleDao;
import com.itheima.health.entity.PageResult;
import com.itheima.health.entity.QueryPageBean;
import com.itheima.health.pojo.Role;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.List;

//角色信息 服务类

@Service
public class RoleServiceImpl implements RoleService {

    @Autowired
    RoleDao roleDao;

    //获取所有的角色信息
    @Override
    public List<Role> findAll() {
        return roleDao.findAll();
    }
    @Override
    public PageResult findPage(QueryPageBean queryPageBean) {
        //开始分页
        PageHelper.startPage(queryPageBean.getCurrentPage(), queryPageBean.getPageSize());

        //分页查询
        Page<Role> page = roleDao.findPageByQueryString(queryPageBean.getQueryString());

        return new PageResult(page.getTotal(), page);
    }

    @Override
    public Role findById(Integer id) {
        return roleDao.findById(id);
    }

    @Override
    public List<Integer> findPermissionIds(Integer id) {
        return roleDao.findPermissionIds(id);
    }

    @Override
    public List<Integer> findMenuIds(Integer id) {
        return roleDao.findMenuIds(id);
    }

    //添加角色
    @Override
    public void add(Integer[] permissionIds, Integer[] menuIds, Role role) {
        //1.先添加角色基本信息，然后做主键回显
        roleDao.addRole(role);

        //2.判断权限id集合
        if (permissionIds != null && permissionIds.length > 0 && role.getId() != null) {
            for (Integer permissionId : permissionIds) {
                roleDao.addPremissionAssociation(role.getId(), permissionId);
            }
        }
        //3.判断菜单id集合
        if (menuIds != null && menuIds.length > 0 && role.getId() != null) {
            for (Integer menuId : menuIds) {
                roleDao.addMenuAssociation(role.getId(), menuId);
            }
        }
    }

    @Override
    public void edit(Integer[] permissionIds, Integer[] menuIds, Role role) {
        //1.先修改角色基本信息，然后做主键回显
        roleDao.editRole(role);

        System.out.println("主键是 ===== " + role.getId());
        //2.判断权限id集合
        if (permissionIds != null && permissionIds.length > 0 && role.getId() != null) {
            //先删除旧的关联关系
            roleDao.delPremissionAssociation(role.getId());
            for (Integer permissionId : permissionIds) {
                //然后添加新的关联关系
                roleDao.addPremissionAssociation(role.getId(), permissionId);
            }
        }else{
            throw new RuntimeException("权限不能为空！！！！！");
        }
        //3.判断菜单id集合
        if (menuIds != null && menuIds.length > 0 && role.getId() != null) {
            roleDao.delMenuAssociation(role.getId());
            for (Integer menuId : menuIds) {
                roleDao.addMenuAssociation(role.getId(), menuId);
            }
        }else{
            throw new RuntimeException("菜单不能为空！！！！！");
        }
    }

    @Override
    public void delById(Integer id) {
        //1.查询角色和用户之间是否存在关联
        Long count = roleDao.findCountById(id);
        if (count > 0){
            //如果有关系就抛出异常
            throw new RuntimeException("该角色和用户有关联，不能删除！！！！！！");
        }else{
            //如果没有关系，就先删除与权限和菜单的关系
            roleDao.delPremissionAssociation(id);
            roleDao.delMenuAssociation(id);
            roleDao.delRole(id);
        }
    }
}
